import * as React from 'react';
import {
Card,
Expander,
ExpanderItem,
Grid,
GridContainerStyleProps,
GridItemStyleProps,
useTheme,
} from '@aws-amplify/ui-react';
import { Demo } from '@/components/Demo';
import { demoState } from '@/utils/demoState';
import { GridContainerPropControls } from './GridContainerPropControls';
import {
GridItemPropControls,
GridItemPropControlsProps,
} from './GridItemPropControls';
import { useGridItemProps } from './useGridItemProps';
import { useGridContainerProps } from './useGridContainerProps';
import { getPropString } from '../utils/getPropString';
const propsToHeaderGridItemCode = (props: GridItemPropControlsProps) => {
return (
'' +
'\n Header' +
'\n '
);
};
const propsToNavGridItemCode = (props: GridItemPropControlsProps) => {
return (
'' +
'\n Nav' +
'\n '
);
};
const propsToMainGridItemCode = (props: GridItemPropControlsProps) => {
return (
'' +
'\n Main' +
'\n '
);
};
const propsToFooterGridItemCode = (props: GridItemPropControlsProps) => {
return (
'' +
'\n Footer' +
'\n '
);
};
const propsToCode = (props: GridContainerStyleProps, children: string) => {
return (
'' +
children +
'\n'
);
};
const defaultGridContainerStyleProps: GridContainerStyleProps = {
alignContent: '',
alignItems: '',
autoColumns: '',
autoFlow: '',
autoRows: '',
columnGap: '0.5rem',
gap: '',
justifyContent: '',
rowGap: '0.5rem',
templateColumns: '1fr 1fr 1fr',
templateRows: '1fr 3fr 1fr',
};
const defaultHeaderGridItemStyleProps: GridItemStyleProps = {
columnStart: '1',
columnEnd: '-1',
rowStart: '',
rowEnd: '',
};
const defaultFooterGridItemStyleProps: GridItemStyleProps = {
...defaultHeaderGridItemStyleProps,
columnStart: '2',
columnEnd: '-1',
};
const defaultNavGridItemStyleProps: GridItemStyleProps = {
...defaultHeaderGridItemStyleProps,
columnStart: '1',
columnEnd: '2',
rowSpan: 2,
};
const defaultMainGridItemStyleProps: GridItemStyleProps = {
...defaultHeaderGridItemStyleProps,
columnStart: '2',
columnEnd: '-1',
};
export const GridDemo = () => {
const theme = useTheme();
const gridContainerProps = useGridContainerProps(
demoState.get('GridContainer') || defaultGridContainerStyleProps
);
const headerGridItemProps = useGridItemProps(
demoState.get('GridItemHeader') || {
...defaultHeaderGridItemStyleProps,
name: 'GridItemHeader',
}
);
const footerGridItemProps = useGridItemProps(
demoState.get('GridItemFooter') || {
...defaultFooterGridItemStyleProps,
name: 'GridItemFooter',
}
);
const navGridItemProps = useGridItemProps(
demoState.get('GridItemNav') || {
...defaultNavGridItemStyleProps,
name: 'GridItemNav',
}
);
const mainGridItemProps = useGridItemProps(
demoState.get('GridItemMain') || {
...defaultMainGridItemStyleProps,
name: 'GridItemMain',
}
);
// To retain expanded items between light and dark mode
const [value, setValue] = React.useState(
demoState.get('GridDemoExpandedItems') || ''
);
const handleExpandChange = React.useCallback((value: string | string[]) => {
demoState.set('GridDemoExpandedItems', value);
setValue(value);
}, []);
const gridItemsCode =
`\n ${propsToHeaderGridItemCode(headerGridItemProps)}` +
`\n ${propsToNavGridItemCode(navGridItemProps)}` +
`\n ${propsToMainGridItemCode(mainGridItemProps)}` +
`\n ${propsToFooterGridItemCode(footerGridItemProps)}`;
return (
>
}
>
Header
Nav
Main
Footer
);
};